home *** CD-ROM | disk | FTP | other *** search
- ----------------------------------
- 密かな愉しみ・高速プログラミングの世界
- ----------------------------------
- 激速PICローダー FPIC.r v1.7
- ----------------------------------
- by 鳳 幽玄
- ----------------------------------
- プログラムの高速化というテーマは、非常に奥の深い楽しいものであります。
-
- FPIC.r は、そんな孤独な快楽を追い求めて作成された激速PICローダーです。
-
- RAM・DISK上で実験してみたところ、取り込み画像などで、PIC.r v1.05 の
-
- 2倍以上、HAPIC.r v1.30 の1.4倍以上の速度で描画できました。(平均)
-
- うそ
-
- 看板に偽りあり。HAPIC.r はあらかじめ画面モードを設定しておけば、
-
- もっと速い速度で描画できるようです。Mint上で実験したため
-
- 気付きませんでした。関係者各位にご迷惑をおかけいたしましたことを
-
- 切腹してお詫びするとともに、さらなる精進を心がけることを、ここに
-
- 誓わせていただきます。(Mitsukyさん、報告どうも。)
-
-
- 実際のところ、純粋な展開速度を比較すると、
-
- だいたい、目安として、百数十キロバイトを超える画像ファイルなら、
-
- FPICの方が速く、それ以下のものならHAPIC.rの方が速いようです。
-
- (FPIC.r は命令の512K展開をしないので、ベタの部分が多いと不利に
-
- なります。)
-
- ・・・ということのようです。
-
- ----------------------------------
- このアーカイブに含まれている全ファイルは、著作者(鳳 幽玄)の許諾無しで
-
- 好きに使っていただいて結構です。商用、部分抜きだしでの使用も可。
-
- ----------------------------------
- 使い方: FPIC.r <ファイル名>
-
- 拡張子は「省略できません」
-
- ----------------------------------
- ○は、デバッグしたもの ●は、仕様が変更、拡張されたもの
-
- v1.0 ・original
-
- v1.1 ○65536色データの場合に誤動作していた。
- ○粗い絵の場合に誤動作していた
-
- v1.2 ○サイズ512x512を超えると自動的に暴走していた。
-
- v1.3 ●正方形モードのPICに対応した(MFGED format)
- ●座標指定のあるPICに対応した(MFGED format)
-
- v1.4 ●65535色表示だったのを65536色表示にした。微妙に遅くなった。
-
- v1.5 ・ファイルサイズを小さくした。
- ・v1.4で遅くなった程度は、速度を盛り返した。
- ・緑の稲妻がちょっと奇麗になった。
-
- v1.6 ○v1.5でエンバグ。画面の下段を塗りきらない場合があった。
- ○テキスト表示をなぜかカットし、そのまま終了していた。
- ○パレット定義をしてなかったかもしれない。
- ・さらに5%の高速化。
-
- v1.7 ・多少の高速化。
-
- ----------------------------------
- 見かけ
-
- ・あんまり実用的じゃない。スイッチも無いし、拡張子すら省略できない。
-
- ・けど、ソース付きなので、こっちは、応用できるかも。
-
- ・32768色モードのPICが読める。
-
- ・65536色モードのPICが読める。
-
- ・正方形表示ができる。
-
- ・表示位置指定ができる。
-
- ----------------------------------
- 技術的な特徴(ソースを読む時の参考にでもしてください)
-
-
- ・ファイルは一括読み込み。(ちょっと高速になる)
-
-
- ・高速なわりにはメモリを喰わない。
-
- プログラム・サイズ(10数Kバイト)
- スタック1K程度(1K程度)
- データ・サイズ
-
- これだけあれば、とりあえず動くはずです。
-
- あ、もちろん、VRAMなどの512K展開バッファも必要ですが。
-
-
- ・緑の稲妻が走る理由
-
- 65536色モードでも32768色モードと同じだけのメモリで
-
- 動作するように工夫しています。
-
- 色の変化点で色コードを書き込むのは同じですが、それに
-
- 続く連鎖に関しては、「どこから連鎖してきたか」の情報を
-
- 書き込むようにしています。塗り込む時には、その情報を元に
-
- カラーコードを取得しています。
-
- (あ、どうやら、ICE.rでも似たようなことをしているらしい。
-
- ・・青い稲妻の方が奇麗。)
-
- ・ビット単位のデータは、とりあえず、一括で扱う。
-
- これによって、それなりに高速になりました。
-
- 連鎖データ編
-
- 01_10_11_10 (左下・真下・右下・真下)
-
- 普通は、こういうのを頭からビット単位でチェックして、
-
- 「うむ。01だな。左下!」「次、10だから真下」・・・
-
- という風に、順番に読んで処理することになるのですが、
-
- それでは、ちょっとアレなので、1バイトごとに、これらのデータを
-
- 読み取り、それに応じて256通りの処理ルーチンに振り分けることで
-
- 一括処理を行うようにしてみました。つまり・・
-
- 「うむ。01_10_00_10だなっ。左下、真下、右下、真下っ!」・・・
-
- これで、最大4つぶんの連鎖を一度に処理できるようになります。
-
- なお、それぞれの処理ルーチンは、Cで書いたプログラムで
-
- 自動作成したものに少し手を加えて使っています(make_src.c)
-
- なお、読みすぎたビットは、Wyle符号解析部に受け渡すので
-
- 無駄になりません。(なる場合もあるけど。)
-
-
- 変化点位置(Wyle符号)編
-
- これも、1バイト読み込みによる振り分けを行っています。
-
- とは言っても、数値1~6の範囲はビット単位で読んだ方が
-
- 速そうだったので、そのようにしています。
-
- なお、これだと大きい数値の場合、バイト枠に入りきらなくなり、
-
- 振り分けができまでんので、1が11個以上続いた場合は、普通に
-
- 処理させています。まあ、数値が大きいってことは
-
- 絵が粗いってことだと思うので、それほど速度が要求される
-
- 部分ではないでしょう。
-
-
- パレット編
-
- とりあえず、16ビット読み込みます。
-
- キャッシュヒットの場合は、8ビットが無駄になりますが、
-
- 連鎖データに流用し、うまく誤魔化しています。
-